Systems: routine that needs to be regularly called
Collections: lists of components that go together to make an entity
Components: data pieces
Entities: objects (label for a specific group of components)

Systems
- orbit: update positions? no because we aren't storing positions
         these only need to be checked for individual calculations or display
- render: what are we focused on right now, data can be cached here
- 'structure view': looks at factory, mine, etc; multiple components

Components
- orbit: parent_id, radius, offset
  - L4/L5 will just be their own entities with orbit data matching
- position: system, x, y (ships not in orbit)
- body: mass, radius
- factory: capacity, pollution?
- mine: capacity, pollution?
-

body = {
  hydrosphere: {} -- pollutants, volume % (relative to planet surface)
  atmosphere: {}  -- volume, pressure, contents
  -- manufactoring, refining, etc -> introduces pollutants into hydrosphere and atmosphere
  populations: {
    {
      resources: {
        fuel: #
        reactives: #    -- jump drives, engines, research, life support
        radioactives: # -- fuel, heavy armor, kinetic weapons, sensors
        alloys: #       -- structure
        crystals: #     -- shields, stealth, ecm/eccm, energy weapons
        silicates: #    -- electronics, capacitors, energy weapons
        -- halogens: #
      }
      structures: {
        'fuel refinery': #
        -- 'type-strength OR type-value': #
        -- {type: 'name', value: #, cost: #, etc} ? -- actual list
      }
    }
  }
  minerals: ?
}

modules = {
  factory: {
    surface: true
    capacity: 10  -- research ++
    pollution: {} -- research --
    cost: {       -- research --
      alloys: 20
      silicates: 2
    }
  }
  mine: {
    surface: true
    capacity: 10  -- research ++
    pollution: {} -- research --
    cost: {       -- research ==
      alloys: 40
      silicates: 6
      reactives: 2
    }
  }
  'fuel refinery': {
    surface: true
    -- orbit: true -- research
    capacity: 100 -- research ++
    pollution: {} -- research --
    cost: {       -- research --
      alloys: 120
      reactives: 20
      crystals: 10
    }
  }
  'mass driver': {
    surface: true
    capacity: 2000 -- research ++
    pollution: {}  -- research --
    cost: {        -- research --
      alloys: 250
      reactives: 120
      radioactives: 20
      silicates: 10
    }
  }
  shipyard: {
    orbit: true
    capacity: 1000
    cost: {            -- research --
      alloys: 2200
      reactives: 180
      radioactives: 80
      silicates: 200
    }
  }

  -- research tech: shuttle range
    --   - salvage facility
    --   - orbital hab
    -- - hanger
    --   - maintenance facility
    -- - gas harvester
    -- - geo
    --   - terraforming
    --   - geo survey sensors
    --   - infrastructure
    -- - sensors
    --   - grav survey sensors
    --   - em sensors
    --   - thermal sensors
    --   - active sensors vs passive sensors
    --   - all sensors can provide tracking and targeting
    --   - bridge
    -- - research
    --   - chemical/physics/genetic/biology/xenology lab
    --   - university
    -- - ship
    --   - design considerations
    --     - deployment time adjusts how much mass is needed per crew
    --     - components designate required crew
    --     - armor area / structural hull requirements
    --     - speed, power use/requirement
    --     - build time, load time, mineral requirement
    --     - signature (th by engines, em by shielding/equipment)
    --     - maintenance life, estimated failure rate
    --     - damage allocation
    --     - em damage, shock damage
    --     - idea: based on volume, min distance before ships collide?
    --   - crew quarters
    --   - engineering section
    --   - main engineering
    --   - engines
    --   - jump drive
    --   - combat drop pods
    --   - tractor
    -- - cargo
    --   - fuel storage
    --   - supplies bay
    --   - shuttle bay (actually just hangers)
    --   - cargo hold
    --   - cryogenic transport
    -- - power plants
    -- - kinetic weapons
    --   - launcher
    --   - magazine
    -- - defense
    --   - armor
    --   - damage control
}
